import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param S string字符串 
     * @param T string字符串 
     * @return bool布尔型
     */
    public boolean isSubsequence (String S, String T) {
        // 如果两个字符串相等 直接返回true
        if(S.equals(T)) {
            return true;
        }
        //使用Set 先把S存到一个Set中 把T也存到另外一个Set中 遇到相同的就删除
        //当S所在的Set删除完了 就存在
        Queue<Character> sS = new LinkedList<>();
        Queue<Character> sT = new LinkedList<>();

        //1、先存S、T到Set中
        for (Character c: S.toCharArray()) {
            sS.add(c);
        }
        for (Character c: T.toCharArray()) {
            sT.add(c);
        }
        //2、对比
        while (!sS.isEmpty() && ! sT.isEmpty()) {
            char tmp = sT.poll();
            if(sS.peek().equals(tmp)) {
                sS.poll();
            }
        }
        if(sS.isEmpty()) {
            return true;
        }
        return false;
    }
}